package stack_queue;

import java.util.Deque;
import java.util.LinkedList;

/**
 * Deque双端队列，既可以当队列用，也可以当栈用，不允许中间插入和删除元素，允许从两头分别进出
 * 继承自  java.util.Queue
 * LinkedList(类) 和 ArrayDeque(类) 都能实现 Deque 接口
 * 规定了  offer/poll/peek       队列
 *        push/pop/peek           栈
 */

public class DequeDemo {
    public static void main(String[] args) {
        Deque<String> deque = new LinkedList<>();

        // 把双端队列当成一个栈去使用，先进后出的特点
        deque.push("甲");
        deque.push("乙");
        deque.push("丙");
        deque.push("丁");
        deque.push("戊");
        deque.push("己");
        deque.push("庚");
        deque.push("辛");
        deque.push("壬");
        deque.push("癸");
        //出栈
        while (!deque.isEmpty()) {
            String e = deque.pop();
            System.out.println(e);
        }

        System.out.println("--------");

        // 把双端队列当成一个队列去使用，先进先出的特点
        deque.offer("甲");
        deque.offer("乙");
        deque.offer("丙");
        deque.offer("丁");
        deque.offer("戊");
        deque.offer("己");
        deque.offer("庚");
        deque.offer("辛");
        deque.offer("壬");
        deque.offer("癸");
        //出队列
        while (!deque.isEmpty()) {
            String e = deque.poll();
            System.out.println(e);
        }
    }
}
